package com.web.webtest.controller;

import com.web.webtest.entity.User;
import com.web.webtest.service.exception.UserRegistrationException;
import com.web.webtest.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

// (需要先引入 SLF4J 的 Logger)
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


@Controller
public class RegistrationController {

    private static final Logger logger = LoggerFactory.getLogger(RegistrationController.class);

    private final UserService userService;

    @Autowired
    public RegistrationController(UserService userService) {
        this.userService = userService;
    }

    /**
     * 显示注册页面
     */
    @GetMapping("/register")
    public String showRegistrationPage(Model model) {
        // 如果模型中已包含 error (例如，从POST请求处理失败后返回)
        // Thymeleaf 会自动处理它
        return "register"; // 返回名为 "register" 的视图 (register.html)
    }

    /**
     * 处理用户注册请求
     */
    @PostMapping("/register")
    public String handleRegistration(@RequestParam String username,
                                     @RequestParam String password,
                                     @RequestParam String confirmPassword,
                                     Model model,
                                     RedirectAttributes redirectAttributes) {

        if (username == null || username.trim().isEmpty() || password == null || password.isEmpty()) {
            model.addAttribute("error", "用户名和密码均不能为空。");
            return "register";
        }

        if (!password.equals(confirmPassword)) {
            model.addAttribute("error", "两次输入的密码不一致，请重新输入。");
            return "register";
        }

        // 可以在这里添加更复杂的密码策略校验，例如长度、特殊字符等


        try {
            User registeredUser = userService.registerUser(username, password);
            logger.info("新用户注册成功: 用户名='{}', 用户ID={}", registeredUser.getUsername(), registeredUser.getId());
            // 注册成功，重定向到登录页面，并带上成功消息
            redirectAttributes.addFlashAttribute("successLoginMsg", "恭喜您，账户注册成功！现在可以使用新账户登录。");
            return "redirect:/login"; // 重定向到登录页
        } catch (UserRegistrationException e) {
            // 注册失败（例如用户名已存在）
            model.addAttribute("error", e.getMessage());
            return "register"; // 返回注册页面并显示错误
        } catch (Exception e) {
            // 其他未知错误
            model.addAttribute("error", "注册过程中发生未知错误，请稍后再试或联系管理员。");
            // 可以在日志中记录详细错误 e.printStackTrace();
            return "register";
        }
    }
}